package com.ruoyi.finance.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.finance.domain.AccountSet;
import com.ruoyi.finance.domain.DefaultAccountSet;
import com.ruoyi.finance.mapper.AccountSetMapper;
import com.ruoyi.finance.mapper.DefaultAccountSetMapper;
import com.ruoyi.finance.service.IAccountSetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 账套管理Service业务层处理
 *
 * @author ruoyi
 * @date 2025-02-24
 */
@Service
public class AccountSetServiceImpl implements IAccountSetService
{
    @Autowired
    private AccountSetMapper accountSetMapper;

    /**
     * 查询账套管理
     *
     * @param accountId 账套管理主键
     * @return 账套管理
     */
    @Override
    public AccountSet selectAccountSetByAccountId(Long accountId)
    {
        return accountSetMapper.selectAccountSetByAccountId(accountId);
    }

    /**
     * 查询账套管理列表
     *
     * @param accountSet 账套管理
     * @return 账套管理
     */
    @Override
    public List<AccountSet> selectAccountSetList(AccountSet accountSet)
    {
        return accountSetMapper.selectAccountSetList(accountSet);
    }

    /**
     * 新增账套管理
     *
     * @param accountSet 账套管理
     * @return 结果
     */
    @Override
    public int insertAccountSet(AccountSet accountSet)
    {
        accountSet.setCreateTime(DateUtils.getNowDate());
        return accountSetMapper.insertAccountSet(accountSet);
    }

    /**
     * 修改账套管理
     *
     * @param accountSet 账套管理
     * @return 结果
     */
    @Override
    public int updateAccountSet(AccountSet accountSet)
    {
        return accountSetMapper.updateAccountSet(accountSet);
    }

    /**
     * 批量删除账套管理
     *
     * @param accountIds 需要删除的账套管理主键
     * @return 结果
     */
    @Override
    public int deleteAccountSetByAccountIds(Long[] accountIds)
    {
        return accountSetMapper.deleteAccountSetByAccountIds(accountIds);
    }

    /**
     * 删除账套管理信息
     *
     * @param accountId 账套管理主键
     * @return 结果
     */
    @Override
    public int deleteAccountSetByAccountId(Long accountId)
    {
        return accountSetMapper.deleteAccountSetByAccountId(accountId);
    }


    /**
     * 查询用户默认的账套
     * @return
     */

    @Override
//    public List<AccountSet> listAccountSetAllByUserId() {
//        //1.获取当前用户
//        LoginUser loginUser = SecurityUtils.getLoginUser();
//        //2.查询账套列表，左外链接查询用户账套中间表（用户选择的默认账套）
//        return accountSetMapper.listAccountSetAllByUserId(loginUser.getUser().getUserId());
//    }
    public  List<AccountSet> listAccountSetAllByUserId(){
        //获取当前的用户 若依自带的工具类
        LoginUser loginUser = SecurityUtils.getLoginUser();
        //根据获取的用户id 查询用户账套中间表
        return accountSetMapper.listAccountSetAllByUserId(loginUser.getUser().getUserId());
    }


    @Resource
    private DefaultAccountSetMapper defaultAccountSetMapper;
    /**
     * 用户切换默认账套   事务操作
     * @param accountId
     * @return
     */
    @Override
    @Transactional
    public int checkDefaultAccountSet(Long accountId) {
//        //1.获取当前登录用户
//        LoginUser loginUser = SecurityUtils.getLoginUser();
//        //2.有的话，判断 当前账套 已经是默认账套了，不做操作
//        LambdaQueryWrapper<DefaultAccountSet> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(DefaultAccountSet::getUserId,loginUser.getUser().getUserId());
//        List<DefaultAccountSet> defaultAccountSets = defaultAccountSetMapper.selectList(queryWrapper);
//
//        if (defaultAccountSets.size()>0){
//            DefaultAccountSet defaultAccountSet = defaultAccountSets.get(0);
//
//            //是默认的账套，不做操作
//            if (defaultAccountSet.getAccountSetId().equals(accountId)){
//                throw new RuntimeException("已经是默认账套了");
//            }
//            //不是默认的账套，把原来的默认账套 删掉
//            defaultAccountSetMapper.delete(queryWrapper);
//        }
//        //4.添加默认账套
//        DefaultAccountSet defaultAccountSet = new DefaultAccountSet();
//        defaultAccountSet.setUserId(loginUser.getUser().getUserId());
//        defaultAccountSet.setAccountSetId(accountId);
//        return defaultAccountSetMapper.insert(defaultAccountSet);
        //获取当前的用户id
        LoginUser loginUser = SecurityUtils.getLoginUser();
        //判断当前用户是否要切换账套 切换账套也要判断他是否没有切换 还是点击的当前账套
        LambdaQueryWrapper<DefaultAccountSet> queryWrapper = new LambdaQueryWrapper<>();
        //添加判断条件 查询当前用户当前在的账套是否是当前要切换的账套
        queryWrapper.eq(DefaultAccountSet::getUserId,loginUser.getUser().getUserId());
        //查询出当前用户当前在的账套数据
        List<DefaultAccountSet> defaultAccountSets = defaultAccountSetMapper.selectList(queryWrapper);
        //判断是否大于0 大于0说明当前用户已经有默认账套了
        if (defaultAccountSets.size()>0){
            //判断当前用户当前在的账套是否是当前要切换的账套
            DefaultAccountSet defaultAccountSet = defaultAccountSets.get(0);

            //是默认的账套，不做额外的操作
            if (defaultAccountSet.getAccountSetId().equals(accountId)){
                throw new RuntimeException("已经是默认账套了");
            }
            //不是用户默认选中的账套，把原来的默认账套 删掉
            defaultAccountSetMapper.delete(queryWrapper);
        }
        //删除原来的默认账套后，再添加新的默认账套
        DefaultAccountSet defaultAccountSet = new DefaultAccountSet();
        defaultAccountSet.setUserId(loginUser.getUser().getUserId());
        defaultAccountSet.setAccountSetId(accountId);
        return defaultAccountSetMapper.insert(defaultAccountSet);


    }
}
